import os

import cx_Oracle


class Config:
    # 模型配置
    MODEL_NAME = "BAAI/bge-large-zh-v1.5"
    MODEL_PATH = "./models/bge-large-zh-v1.5"
    CACHE_DIR = "./cache"

    DEVICE_MODE = os.getenv('DEVICE_MODE', 'cpu')  # 可选值: 'cpu' 或 'cuda'

    # 数据库配置
    ORACLE_PORT = int(os.getenv('ORACLE_PORT', '1521'))
    ORACLE_USER = os.getenv('ORACLE_USER', 'AH_SLM4')

    # 生产环境
    ORACLE_HOST = os.getenv('ORACLE_HOST', '10.243.162.129')
    ORACLE_PASSWORD = os.getenv('ORACLE_PASSWORD', 'alrt_MS86ah')
    ORACLE_SID = os.getenv('ORACLE_SID', 'itgrept1')

    # 本地环境
    # ORACLE_PASSWORD = os.getenv('ORACLE_PASSWORD', '1')
    # ORACLE_HOST = os.getenv('ORACLE_HOST', '127.0.0.1')
    # ORACLE_SID = os.getenv('ORACLE_SID', 'orcl')

    # 使用 makedsn 生成正确的 DSN
    ORACLE_DSN = cx_Oracle.makedsn(ORACLE_HOST, ORACLE_PORT, sid=ORACLE_SID)

    # API配置
    API_HOST = "0.0.0.0"
    API_PORT = 8000

    # 日志配置
    LOG_LEVEL = "INFO"
    LOG_FILE = "semantic_api.log"

    # 缓存配置
    MAX_EMBEDDING_CACHE_SIZE = 2000000  # 最大缓存嵌入向量数量
    CACHE_SAVE_INTERVAL = 600  # 缓存保存间隔（秒）

    # 搜索配置
    DEFAULT_TOP_K = 10
    MAX_TOP_K = 100

    # FAISS配置
    FAISS_NLIST = 100  # 用于IVF索引的聚类数量
    FAISS_NPROBE = 10  # 搜索时探测的聚类数量

    EMBEDDING_BATCH_SIZE = 1024  # 嵌入向量批处理大小
    MAX_EMBEDDING_BATCH_SIZE = 1024  # 最大批处理大小

    TABLE_NAME = "TB_COSMIC_DATA"

    # 相似度阈值配置
    SIMILARITY_THRESHOLDS = {
        '功能用户需求': 0.9,  # gnyhxq 阈值
        '功能过程': 0.9,      # gngc 阈值
        '子过程描述': 0.9     # zgcms 阈值
    }

    # 多线程配置
    MAX_EMBEDDING_WORKERS = min(4, os.cpu_count())  # 嵌入向量生成的最大线程数
    MAX_INDEX_WORKERS = 3  # 索引构建的最大线程数

    # 前端访问令牌
    FRONTEND_TOKEN = os.getenv("FRONTEND_TOKEN", "sk-rdmp-7f8e9d2a1b3c4e5f6789abcd0123456789efghij")

    # 嵌入向量维度
    EMBEDDING_DIMENSION = 1024

    # 索引初始化批处理大小
    INDEX_BATCH_SIZE = 10000

    # 异步等待时间（秒）
    FRONTEND_AUTH_TIMEOUT = 300

    # 离线模式
    OFFLINE = True  # True 表示使用本地模型


    # 定时器配置
    ENABLE_AUTO_UPDATE_TIMER = False  # 是否启用定时器
    AUTO_UPDATE_INTERVAL = 60  # 定时器间隔（秒），默认60秒（1分钟）